package com.ssy.lingxi.pay.utils;

import cn.hutool.core.date.DateUtil;

import java.util.Calendar;
import java.util.Date;
import java.util.List;

/**
 * 授信工具类
 * @author 伍将
 * @date 2020/8/26
 * @version 2.0.0
 */
public class CreditUtil {

    /**
     * 获取到期时间
     * @author 伍将
     * @date 2020/8/26
     * @param time:
     * @param billDay:
     * @param repayPeriod:
     * @return java.util.Date
     **/
    public static Date getExpireTime(Date time, Integer billDay, Integer repayPeriod) {

        // 账单所属时间（格式：当月第一天0点0分时间戳）
        long belongTime = DateUtil.beginOfMonth(time).getTime();
        Date startTime = DateUtil.date(belongTime);
        // 获取截止时间:下个月第一个日+账单日+还款周期
        Date endTime = DateUtil.offsetDay(DateUtil.offsetMonth(startTime, 1), (billDay + repayPeriod));
        // 获取到期时间=截止时间往前推一秒，得到前一天晚上23:59:59

        return DateUtil.offsetSecond(endTime, -1);
    }

    /**
     * 获取最后一步
     * @param steps 步骤列表
     * @return 最后一步
     */
    public static Integer getLastStep(List<Integer> steps) {
        Integer result = 0;
        if (null != steps && steps.size() > 0) {
            Integer outerLastStep = steps.get(steps.size() - 1);
            // 最后一步为0时，代表已完成，则取上一步骤值
            if (result.equals(outerLastStep)) {
                if (steps.size() > 1) {
                    result = steps.get(steps.size() - 2);
                }
            } else {
                result = outerLastStep;
            }
        }

        return result;
    }

    /**
     * date2比date1多的天数
     * @param date1
     * @param date2
     * @return
     */
    public static int differentDays(Date date1, Date date2) {
        Calendar cal1 = Calendar.getInstance();
        cal1.setTime(date1);

        Calendar cal2 = Calendar.getInstance();
        cal2.setTime(date2);
        int day1 = cal1.get(Calendar.DAY_OF_YEAR);
        int day2 = cal2.get(Calendar.DAY_OF_YEAR);

        int year1 = cal1.get(Calendar.YEAR);
        int year2 = cal2.get(Calendar.YEAR);
        if (year1 != year2)   //同一年
        {
            int timeDistance = 0;
            for (int i = year1; i < year2; i++) {
                if (i % 4 == 0 && i % 100 != 0 || i % 400 == 0)    //闰年
                {
                    timeDistance += 366;
                } else    //不是闰年
                {
                    timeDistance += 365;
                }
            }
            return timeDistance + (day2 - day1);
        } else    //不同年
        {
            return day2 - day1;
        }
    }
}
